package gestion.horarios.view.jsf.beans;

import gestion.horarios.commons.Constantes;
import gestion.horarios.controller.facade.GestionHorariosI;
import gestion.horarios.controller.facade.GestionHorarios;
import gestion.horarios.view.jsf.exceptions.EscenarioNotExistsException;
import gestion.horarios.view.jsf.exceptions.GestionHorariosException;
import gestion.horarios.model.jpa.entities.CicloAcademico;
import gestion.horarios.model.jpa.entities.Escenario;
import gestion.horarios.model.jpa.entities.Horario;
import gestion.horarios.model.jpa.entities.Sede;
import gestion.horarios.model.jpa.entities.SedeEscenario;
import gestion.horarios.model.jpa.entities.SedeEscenarioPK;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.primefaces.event.SelectEvent;

@ManagedBean(name = "ESCENARIO")
@SessionScoped
public class EscenarioManagedBean implements Serializable {
	private static final long serialVersionUID = 1L;
	private int escenarioId;
	private String nombre;
	private String fechaCreacion;
	private String fechaEjecucion;
	private String estado;
	private String prioridad;
	private Integer minimoHorasTC;
	private Integer maximoHorasTP;
	private Integer horasDesplazamientoEntreSedes;
		
	private Escenario escenario;
	private CicloAcademico cicloAcademico;
	private List<String> sedeEscenariosSeleccionados;
	private List<SedeEscenario> sedeEscenarios;

	// Para los combos
	private String estadoSeleccionado = null;
	private Map<String, String> estados;
	private List<SelectItem> ciclosAcademicos;
	private Integer cicloAcademicoSeleccionado = 0;
	private List<SelectItem> sedes;
	private FacesContext context;

	public EscenarioManagedBean() {
		super();
		System.out
				.println("*** Entrando al constructor de ParentEscenarioManagedBean");
		listarCombos();
	}

	public void listarCombos() {
		GestionHorariosI gh = new GestionHorarios();
		context = FacesContext.getCurrentInstance();

		try {
			setCiclosAcademicos(gh.getCiclosAcademicos());	
			setSedes(gh.getSedes());
		} catch (GestionHorariosException e) {
			System.out.println("* * * GestionarHorariosException * * *");
		}
	}
	
	public void grabarEscenario(){
		GestionHorariosI gh = new GestionHorarios();
		context = FacesContext.getCurrentInstance();
		System.out.println("grabando...cicloacad: "+cicloAcademicoSeleccionado);
		try {
			this.escenario = new Escenario();
			CicloAcademico cicloAcad = new CicloAcademico();
			cicloAcad.setCicloAcademicoId(cicloAcademicoSeleccionado);
			this.escenario.setCicloacademico(cicloAcad);
			this.escenario.setEstado("PE");
			this.escenario.setFechaEjecucion(null);
			this.escenario.setFechaCreacion(new java.sql.Date((new Date()).getTime()));
			this.escenario.setNombre(nombre);
			this.escenario.setMinHrsTC(minimoHorasTC);
			this.escenario.setMaxHrsTP(maximoHorasTP);
			this.escenario.setPrioridad(prioridad);
			
			//System.out.println("sedes selecc:"+sedeEscenarios);
			this.sedeEscenarios = new ArrayList<SedeEscenario>();
			
			for(int i=0; i<sedeEscenariosSeleccionados.size(); i++){
				System.out.println("escenario:"+sedeEscenariosSeleccionados.get(i));

				SedeEscenario sedeEscenario = new SedeEscenario();
				sedeEscenario.setEscenario(this.escenario);
				
				Sede sede = new Sede();
				sede.setSedeId(Integer.parseInt(sedeEscenariosSeleccionados.get(i)));
				sedeEscenario.setSede(sede);

				this.sedeEscenarios.add(sedeEscenario);
			}
			
			this.escenario.setSedeEscenarios(this.sedeEscenarios);
			gh.editarEscenario(this.escenario);
			
			//System.out.println(this.nombre);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println(""+e);
			e.printStackTrace();
		}
		
	}
	

	public int getEscenarioId() {
		return escenarioId;
	}

	public void setEscenarioId(int escenarioId) {
		this.escenarioId = escenarioId;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(String fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public String getFechaEjecucion() {
		return fechaEjecucion;
	}

	public void setFechaEjecucion(String fechaEjecucion) {
		this.fechaEjecucion = fechaEjecucion;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Escenario getEscenario() {
		return escenario;
	}

	public void setEscenario(Escenario escenario) {
		this.escenario = escenario;
	}

	public CicloAcademico getCicloAcademico() {
		return cicloAcademico;
	}

	public void setCicloAcademico(CicloAcademico cicloAcademico) {
		this.cicloAcademico = cicloAcademico;
	}

	public Map<String, String> getEstados() {
		return estados;
	}

	public void setEstados(Map<String, String> estados) {
		this.estados = estados;
	}

	public List<String> getSedeEscenariosSeleccionados() {
		return sedeEscenariosSeleccionados;
	}

	public void setSedeEscenariosSeleccionados(List<String> sedeEscenariosSeleccionados) {
		this.sedeEscenariosSeleccionados = sedeEscenariosSeleccionados;
	}
	
	public List<SelectItem> getCiclosAcademicos() {
		return ciclosAcademicos;
	}

	public void setCiclosAcademicos(List<SelectItem> ciclosAcademicos) {
		this.ciclosAcademicos = ciclosAcademicos;
	}

	public Integer getCicloAcademicoSeleccionado() {
		return cicloAcademicoSeleccionado;
	}

	public void setCicloAcademicoSeleccionado(Integer cicloAcademicoSeleccionado) {
		this.cicloAcademicoSeleccionado = cicloAcademicoSeleccionado;
	}

	public String getEstadoSeleccionado() {
		return estadoSeleccionado;
	}

	public void setEstadoSeleccionado(String estadoSeleccionado) {
		this.estadoSeleccionado = estadoSeleccionado;
	}

	public List<SelectItem> getSedes() {
		return sedes;
	}

	public void setSedes(List<SelectItem> sedes) {
		this.sedes = sedes;
	}

	public String getPrioridad() {
		return prioridad;
	}

	public void setPrioridad(String prioridad) {
		this.prioridad = prioridad;
	}

	public Integer getMinimoHorasTC() {
		return minimoHorasTC;
	}

	public void setMinimoHorasTC(Integer minimoHorasTC) {
		this.minimoHorasTC = minimoHorasTC;
	}

	public Integer getMaximoHorasTP() {
		return maximoHorasTP;
	}

	public void setMaximoHorasTP(Integer maximoHorasTP) {
		this.maximoHorasTP = maximoHorasTP;
	}

	public Integer getHorasDesplazamientoEntreSedes() {
		return horasDesplazamientoEntreSedes;
	}

	public void setHorasDesplazamientoEntreSedes(
			Integer horasDesplazamientoEntreSedes) {
		this.horasDesplazamientoEntreSedes = horasDesplazamientoEntreSedes;
	}

	public List<SedeEscenario> getSedeEscenarios() {
		return sedeEscenarios;
	}

	public void setSedeEscenarios(List<SedeEscenario> sedeEscenarios) {
		this.sedeEscenarios = sedeEscenarios;
	}

}
